package com.seckill.user.controller;


import com.seckill.api.dto.user.LoginFormDTO;
import com.seckill.api.dto.user.UserDTO;
import com.seckill.common.domain.dto.LoginUserDTO;
import com.seckill.user.domain.query.UserQuery;
import com.seckill.user.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author zsc
 * @since 2025-05-14
 */
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
@Api(tags = "用户相关接口")
public class UserController {

    private final IUserService userService;

    /**
     * 注册用户
     * @param userQuery
     */
    @ApiOperation("注册用户")
    @PostMapping("/register")
    void registerUser(@RequestBody UserQuery userQuery){
        userService.registerUser(userQuery);
    }

    //修改用户信息
    @ApiOperation("修改用户信息")
    @PutMapping("/{id}")
    void updateUser(@PathVariable("id") Long id, @RequestBody UserQuery userQuery){
        userService.updateUser(id,userQuery);
    }

    /**
     * 根据手机号查询用户id
     * @param phone 手机号
     * @return 用户id
     */
    @ApiOperation("根据手机号查询用户id")
    @GetMapping("/ids")
    Long exchangeUserIdWithPhone(@RequestParam("phone") String phone){
        return userService.exchangeUserIdWithPhone(phone);
    }

    /**
     * 查询用户类型
     * @param id 用户id
     * @return 用户类型，1-管理员，2-普通用户
     */
    @ApiOperation("查询用户类型")
    @GetMapping("/users/{id}/type")
    Integer queryUserType(@PathVariable("id") Long id){
        return userService.queryUserType(id);
    }

    /**
     * 登录接口
     * @param loginDTO 登录信息
     * @return 用户详情
     */
    @ApiOperation("登录接口")
    @PostMapping("/detail")
    LoginUserDTO queryUserDetail(@RequestBody LoginFormDTO loginDTO){
        return userService.queryUserDetail(loginDTO);
    }


    /**
     * <h1>根据id批量查询用户信息</h1>
     * @param ids 用户id集合
     * @return 用户集合
     */
    @ApiOperation("根据id批量查询用户信息")
    @GetMapping("/list")
    List<UserDTO> queryUserByIds(@RequestParam("ids") Iterable<Long> ids){
        return userService.queryUserByIds(ids);
    }


    @ApiOperation("扣减余额")
    @PutMapping("/money/deduct")
    public void deductMoney(@RequestParam("pw") String pw,@RequestParam("amount") Integer amount){
        userService.deductMoney(pw, amount);
    }

    @ApiOperation("扣减秒杀余额")
    @PutMapping("/sec/deduct")
    void deductMoney( @RequestParam("amount") Integer amount){
        userService.deductsecMoney(amount);
    }
}
